﻿using SupportLayer.Enums;
using SupportLayer.Objetos.Placa;
using SupportLayer.Util.ExtensionMethods;
using System.Web.UI.WebControls;

namespace TranSys_Web.UCs
{
  public class LoadSeta
  {
    private int GapHeight;
    private PlacaClass Placa;
    private double Divideby;

    public LoadSeta(int _gapHeight, PlacaClass _placa, double divideby)
    {
      Placa = _placa;
      GapHeight = _gapHeight;
      Divideby = divideby;
    }

    public Panel SetaSimples(LinhaClass linhaClass, int y, TipoSeta _tipoSeta, bool setaAnteriorEsquerda)
    {
      Panel pnlImagem = new Panel();

      switch (_tipoSeta)
      {
        case TipoSeta.S1O:
        case TipoSeta.S1NO:
        case TipoSeta.S1SO:
          pnlImagem.Style.Add("float", "left");
          pnlImagem.Style.Add("margin-left", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          break;
        case TipoSeta.S1N:
          if (setaAnteriorEsquerda)
          {
            pnlImagem.Style.Add("float", "right");
            pnlImagem.Style.Add("margin-right", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          }
          else
          {
            pnlImagem.Style.Add("float", "left");
            pnlImagem.Style.Add("margin-left", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          }
          break;
        case TipoSeta.S1E:
        case TipoSeta.S1NE:
        case TipoSeta.S1SE:
          pnlImagem.Style.Add("float", "right");
          pnlImagem.Style.Add("margin-right", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          break;
        default:
          break;
      }

      pnlImagem.Style.Add("height", ((linhaClass.Height + GapHeight) / Divideby).toStringNumber() + "px");
      pnlImagem.Style.Add("width", (linhaClass.Elements[y].Element.GetWidth() / Divideby).toStringNumber() + "px");

      Panel pnlSeta = new Panel();
      pnlSeta.Style.Add("height", "100%");
      pnlSeta.Style.Add("width", (linhaClass.Elements[y].Element.GetWidth() / Divideby).toStringNumber() + "px");
      pnlSeta.Style.Add("background", "url('" + linhaClass.Elements[y].Element.GetValue() + "') no-repeat center");
      pnlSeta.Style.Add("background-size", "100%");
      pnlImagem.Controls.Add(pnlSeta);
      return pnlImagem;
    }

    /// <summary>
    /// Apesar de se chamar seta dupla, serve para até 3 agrupamentos
    /// </summary>
    /// <param name="posLinha"></param>
    /// <param name="y"></param>
    /// <param name="_tipoSeta"></param>
    /// <param name="setaAnteriorEsquerda"></param>
    /// <returns></returns>
    public Panel SetaDupla(int posLinha, int y, TipoSeta _tipoSeta, bool setaAnteriorEsquerda)
    {
      LinhaClass linhaClass = Placa.Linhas[posLinha];

      Panel pnlImagem = new Panel();

      switch (_tipoSeta)
      {
        case TipoSeta.S2NO:
        case TipoSeta.S2SO:
        case TipoSeta.S3O:
          pnlImagem.Style.Add("float", "left");
          pnlImagem.Style.Add("margin-left", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          break;

        case TipoSeta.S2N:
          if (setaAnteriorEsquerda)
          {
            pnlImagem.Style.Add("float", "right");
            pnlImagem.Style.Add("margin-right", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          }
          else
          {
            pnlImagem.Style.Add("float", "left");
            pnlImagem.Style.Add("margin-left", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          }
          break;

        case TipoSeta.S2NE:
        case TipoSeta.S2SE:
        case TipoSeta.S3E:
          pnlImagem.Style.Add("float", "right");
          pnlImagem.Style.Add("margin-right", (linhaClass.Gap / Divideby).toStringNumber() + "px");
          break;

        default:
          break;
      }

      if (Placa.Linhas[posLinha + 1].AgruparSeta || Placa.Linhas[posLinha + 1].AgruparPictograma)
        pnlImagem.Style.Add("height",
          ((Placa.Linhas[posLinha].Height +
          Placa.Linhas[posLinha + 1].Height +
          Placa.Linhas[posLinha + 2].Height -
          linhaClass.Gap * 2) / Divideby).toStringNumber() + "px");
      else
        pnlImagem.Style.Add("height",
          ((Placa.Linhas[posLinha].Height +
          Placa.Linhas[posLinha + 1].Height -
          linhaClass.Gap) / Divideby).toStringNumber() + "px");

      pnlImagem.Style.Add("width", (linhaClass.Elements[y].Element.GetWidth() / Divideby).toStringNumber() + "px");

      Panel pnlSeta = new Panel();
      pnlSeta.Style.Add("height", "100%");
      pnlSeta.Style.Add("width", (linhaClass.Elements[y].Element.GetWidth() / Divideby).toStringNumber() + "px");
      pnlSeta.Style.Add("background", "url('" + linhaClass.Elements[y].Element.GetValue() + "') no-repeat center");
      pnlSeta.Style.Add("background-size", "100%");
      pnlImagem.Controls.Add(pnlSeta);
      return pnlImagem;
    }
  }
}